package 面向对象初级.HomeWork;

public class MyDate01 {
    /**
     * 4、MyDate日期类-1
     * 案例：
     * 声明一个日期类MyDate，包含属性：年、月、日，并在MyDate类中声明几个方法：
     * 1、boolean isLeapYear()：判断当前日期的是闰年吗
     * 2、void set(int y, int m, int d)：修改年，月，日为新日期
     * 3、void puls(int years, int months, int days)：加上years年，months月，days天后的日期
     * 并在测试类Exercise4的main方法中创建对象，并调用测试
     */
        int year;
        int month;
        int day;

    // 判断是否为闰年
        public boolean isLeapYear() {
            return (year % 4 == 0 && year % 100!= 0) || year % 400 == 0;
        }

        // 设置新日期
        public void set(int y, int m, int d) {
            year = y;
            month = m;
            day = d;
        }

        // 加上指定年、月、日之后的日期
        public void puls(int years, int months, int days) {
            year += years;
            month += months;
            day += days;

            // 处理月份超过12的情况
            while (month > 12) {
                year++;
                month -= 12;
            }

            // 处理日期超过当月最大天数的情况
            int maxDays = getMaxDaysInMonth();
            while (day > maxDays) {
                month++;
                day -= maxDays;
                if (month > 12) {
                    year++;
                    month -= 12;
                }
                maxDays = getMaxDaysInMonth();
            }
        }

        // 获取当月最大天数
        private int getMaxDaysInMonth() {
            if (month == 2) {
                if (isLeapYear()) {
                    return 29;
                } else {
                    return 28;
                }
            } else if (month == 4 || month == 6 || month == 9 || month == 11) {
                return 30;
            } else {
                return 31;
            }
        }
    }
